package HashMap.Nodo.Operaciones;

import HashMap.Nodo.Nodo;
import HashMap.Nodo.Operacion;
import HashMap.GenerarCodigoNASM;
import HashMap.Nodo.Categoria;
import HashMap.Nodo.Subclases.Escalar;
import HashMap.Nodo.TipoBasicoDeDatos;
import HashMap.Pila;

public class ConstanteEscalar implements Operacion {

    private String valor = "";
    private Nodo nodo;

    public ConstanteEscalar(String valor) {
        if (valor != null) {
            this.valor = valor;
        }
    }

    @Override
    public int getLongitud() {
        throw new UnsupportedOperationException("Las constantes escalares no soportan esta operación");
    }

    @Override
    public String generarCodigoNASM() {
        return "mov [" + nodo.getNombre() + "], " + valor;
    }

    @Override
    public Nodo generarNodo(String tokenOperacion) {
        String nombre = GenerarCodigoNASM.getInstancia().getNombreVariableAuxiliar();
        this.nodo = new Escalar(nombre, TipoBasicoDeDatos.INT, Categoria.VARIABLE, 0, "");
        Pila.getInstancia().addNodoALaTablaSuperior(nodo);
        return this.nodo;
    }
}
